/**
 * 
 */
package ipms.necfgsyn;

import java.rmi.Remote;
import java.util.ArrayList;
import java.util.HashMap;

import org.snmp4j.PDU;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.Variable;
import org.snmp4j.smi.VariableBinding;

/**
 * @author spdjnh
 * 2012.12.26
 * 提供配置刷新的RMI接口
 * 若网元不存在或其ip地址没配置都返回null
 * 
 * 调用方法示例：
 * import java.rmi.Naming; 
 * ...
 * ICfgSynRmi cfgsyn = (ICfgSynRmi)Naming.lookup("//127.0.0.1:21099/CfgSyn");
 * cfgsyn.sync(iNeId);
 * 
 */
public interface ICfgSynRmi extends Remote {
	/**
	 * 同步所有网元
	 * @return 同步结果，如“success”或错误描述
	 * @throws Exception
	 */
	 public String sync() throws Exception; 
	 
	 /**
	  * 同步指定网元
	  * @param sNeId 网元ID
	  * @return 同步结果，如“success”或错误描述
	  * @throws Exception
	  */
	 public String sync(int sNeId) throws Exception; 
	 
	 /**
	  * 获取单个oid对应的值
	  * @param oid
	  * @return PDU
	  * @throws Exception
	 * @throws Exception 
	  */
	 public PDU get(int iNeId,String oid) throws Exception; 
	 public PDU get(int iNeId,OID oid) throws Exception; 
	 
	 /**
	  * 获取多个oid对应的值
	  * @param vbs
	  * @return PDU
	  * @throws Exception
	  */
	 public PDU get(int iNeId, VariableBinding vbs[]) throws Exception; 
	 
	 /**
	  * 获取下一可访问节点的值
	  * @param preOid
	  * @return PDU
	  * @throws Exception
	  */
	 public PDU getNext(int iNeId, String preOid) throws Exception;
	 public PDU getNext(int iNeId, OID preOid) throws Exception;
	 
	 /**
	  * 针对一个oid去获取其下所有子节点值
	  * @param baseOid
	  * @return ArrayList<PDU>
	  * @throws Exception
	  */
	 public ArrayList<PDU> walk(int iNeId, String baseOid) throws Exception;
	 public ArrayList<PDU> walk(int iNeId, OID baseOid) throws Exception;
	 
	 
	 /**
	 * 获取Table节点，类似mib browser的table view
	 * 
	 * @param entry：参见MibConst.java中的定义方式
	 * @return：每一行的“instance”key可以取出实例（或indexes），其值为OID类型
	 * 			如：1.2.1
	 * @throws Exception
	 */
	 public  ArrayList<HashMap<String, Variable>> getTable(int iNeId, HashMap<String, OID> entry) throws Exception;
		
			
	 /**
	  * 设置单个节点
	  * @param vb
	  * @return PDU
	  * @throws Exception
	  */
	 public PDU set(int iNeId, VariableBinding vb) throws Exception;
	 
	 /**
	  * 设置多个节点
	  * @param vbs
	  * @throws Exception
	  */
	 public PDU set(int iNeId, VariableBinding vbs[]) throws Exception;
	 
	 
}
